Android View绘制流程深度解析
📚 共计 30 章节
01
View绘制流程总览
从Activity启动到屏幕显示,整体链路概览,核心三件套(measure、layout、draw)的职责与调用顺序。
核心
总览
02
DecorView与Window
Window的概念、PhoneWindow的实现、DecorView的创建与加载、setContentView背后的故事。
Window
DecorView
03
MeasureSpec详解
MeasureSpec的组成(mode + size)、三种模式(UNSPECIFIED、EXACTLY、AT_MOST)、子View的MeasureSpec如何由父View决定。
测量
模式
04
onMeasure源码分析
View的默认onMeasure实现、ViewGroup的measureChildren流程、自定义View时如何重写onMeasure。
源码
自定义
05
MeasureSpec与LayoutParams
LayoutParams如何影响MeasureSpec的生成、不同布局容器(LinearLayout、FrameLayout)的MeasureSpec计算差异。
布局参数
差异
06
onLayout源码分析
View的onLayout空实现、ViewGroup的onLayout抽象方法、layout方法的核心逻辑(setFrame + onLayout)。
布局
源码
07
自定义ViewGroup的Layout
重写onLayout的步骤、子View位置计算、margin与padding的处理、实战:简易流式布局。
自定义
实战
08
onDraw源码分析
Canvas与Paint的配合、View的onDraw默认实现、ViewGroup的dispatchDraw与onDraw的区别。
绘制
Canvas
09
绘制顺序与层级
dispatchDraw的递归调用、子View绘制顺序、Z轴层级(elevation与translationZ)的影响。
层级
Z轴
10
Canvas与Drawable
Canvas的常用API(drawLine、drawRect、drawBitmap等)、Drawable的绘制、自定义Drawable。
Canvas
Drawable
11
invalidate与postInvalidate
请求重绘的机制、invalidate的触发条件、postInvalidate与线程安全、invalidate的优化(局部刷新)。
重绘
优化
12
requestLayout与forceLayout
请求重新布局的流程、requestLayout如何触发measure和layout、与invalidate的区别。
布局
请求
13
View的刷新机制总结
invalidate、requestLayout、postInvalidate三者的关系与使用场景、性能优化建议。
刷新
总结
14
绘制流程与硬件加速
硬件加速的原理、DisplayList与GPU渲染、软件绘制与硬件绘制的切换、硬件加速的限制。
硬件加速
GPU
15
View的动画与绘制
属性动画如何触发invalidate、View动画与属性动画在绘制上的区别、动画过程中的measure/layout/draw。
动画
属性动画
16
触摸事件与绘制
事件分发机制(dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent)与绘制的关系、点击区域(hitRect)的计算。
触摸
事件
17
View的滚动与绘制
scrollTo与scrollBy的原理、滚动后的绘制区域变化、Scroller与OverScroller的使用。
滚动
Scroller
18
View的焦点与绘制
焦点查找算法、焦点变化如何触发重绘、焦点与触摸的交互。
焦点
重绘
19
测量与布局优化
避免过度测量、优化onMeasure和onLayout、使用ConstraintLayout减少嵌套。
优化
ConstraintLayout
20
View的绘制优化
避免过度绘制(overdraw)、使用merge和include标签、ViewStub的使用、硬件加速的优化技巧。
过度绘制
优化
21
View的缓存机制
DrawingCache与硬件缓存、LayerType(SOFTWARE、HARDWARE、NONE)的选择、缓存失效与更新。
缓存
LayerType
22
线程与绘制
UI线程与绘制的关系、Handler与Looper在绘制中的作用、Choreographer与帧同步。
线程
Choreographer
23
Choreographer与VSync
垂直同步信号、Choreographer的回调机制(input、animation、traversal、commit)、帧率控制。
VSync
帧率
24
绘制与SurfaceFlinger
Surface与SurfaceFlinger的关系、BufferQueue与双缓冲/三缓冲、合成与显示。
SurfaceFlinger
缓冲
25
绘制与WindowManager
WindowManager的addView流程、WindowToken与Session、跨进程通信(Binder)在绘制中的作用。
WindowManager
Binder
26
绘制与Activity生命周期
onCreate、onStart、onResume中绘制行为的不同、onWindowFocusChanged的作用。
生命周期
焦点
27
绘制与Fragment
Fragment的生命周期对绘制的影响、FragmentTransaction与View的添加/移除。
Fragment
事务
28
绘制与RecyclerView
RecyclerView的复用机制、onBindViewHolder与绘制的关系、ItemAnimator与绘制动画。
RecyclerView
复用
29
自定义View实战:仪表盘
综合案例:自定义仪表盘View(测量、布局、绘制、触摸事件、动画)。
实战
仪表盘
30
绘制与性能监控
使用Systrace分析绘制性能、Profile GPU Rendering、Layout Inspector调试布局、常见性能问题排查。
性能
Systrace